﻿// -------------------------------------------------------------------------
//    @FileName         :    NFlogEventHandler.h
//    @Author           :    gaoyi
//    @Date             :    24-7-30
//    @Email            :    445267987@qq.com
//    @Module           :    NFlogEventHandler
//
// -------------------------------------------------------------------------

#pragma once

#include "proto_log.nanopb.h"
#include "NFComm/NFCore/NFPlatform.h"

struct RoleOne;

enum SEC_EDIT_TYPE
{
    EN_SEC_EDIT_GROUP_MOD_ANNOUNCE = 1, //群组公告
    EN_SEC_EDIT_GROUP_CHANGE_NAME = 2, //群组名称
    EN_SEC_EDIT_GUILD_SET = 3, //公会公告
    EN_SEC_EDIT_GUILD_CREATE = 4, //创建公会
    EN_SEC_EDIT_RENAME = 5, //改名
    EN_SEC_EDIT_EXPLORER_RENAME = 6, //探险团改名
};

enum SEC_CHAT_TYPE
{
    EN_SEC_CHAT_GROUP_SEND_MSG = 91,
    EN_SEC_CHAT_TEAM_INVITE = 92,
};

enum SEC_SNS_ACT
{
    EN_SEC_ACT_SET_BLACK_LIST = 1,
    EN_SEC_ACT_DEL_BLACK_LIST = 2,
    EN_SEC_ACT_ADD_FRIEND = 3,
    EN_SEC_ACT_SET_MASTER_POST = 4,
    EN_SEC_ACT_SET_APPRENTICE_POST = 5,
};

enum SEC_PLAYER_LOGIN_PROCESS_TYPE
{
    EN_SEC_PLAYER_LOGIN_PROCESS_AUTH = 1,
    EN_SEC_PLAYER_LOGIN_PROCESS_SESSION_SUCCESS = 2,
    EN_SEC_PLAYER_LOGIN_PROCESS_FAST_LOGIN_NTF = 3,
    EN_SEC_PLAYER_LOGIN_PROCESS_ADD_LINE_UP = 4,
    EN_SEC_PLAYER_LOGIN_PROCESS_OUT_LINE_UP = 5,
    EN_SEC_PLAYER_LOGIN_PROCESS_CANCEL_LINE_UP = 6,
    EN_SEC_PLAYER_LOGIN_PROCESS_FAST_LOGIN_REQ = 7,
    EN_SEC_PLAYER_LOGIN_PROCESS_GET_ACCOUNT_REQ = 8,
};

class NFSession;
class NFPlayer;
/**
 * @class NFlogEventHandler
 *
 * 该类定义了日志事件处理程序，用于处理与会话创建和玩家登录相关的事件。
 */
class NFlogEventHandler
{
public:
    /**
     * 当会话创建成功时的处理函数。
     *
     * @param pSession 指向创建成功的会话的指针。
     * @return 返回处理结果的整数值。
     */
    static int OnSessionCreateSuccess(NFSession *pSession);

    // 处理会话日志检查点事件
    // 参数pSession指向会话对象，iCheckPoint为检查点标识
    // 返回处理结果，0为成功，非0为失败
    static int OnSessionLogCheckPoint(NFSession *pSession, int iCheckPoint);

public:
    /**
     * @brief 处理玩家获取账号信息的请求
     *
     * 此函数用于处理玩家发起的获取账号信息的请求。它接收一个会话对象作为参数，
     * 该对象包含了请求的细节和发送响应所需的信息。
     *
     * @param pSession 一个指向NFSession的指针，NFSession是表示玩家会话的类，包含了会话的标识和状态信息。
     * @return int 返回一个整数值，通常用于表示操作的成功与否。具体的返回值含义依赖于应用程序的定义。
     */
    static int OnPlayerGetAccountInfoReq(NFSession *pSession);

    /**
     * 处理玩家登录过程中的事件。
     *
     * @param pSession 指向相关会话的指针。
     * @param type 登录过程的类型，用于区分不同的登录阶段。
     * @param extraData 登录过程中的额外数据，可能包含验证信息等。
     * @return 返回处理结果的整数值。
     */
    static int OnPlayerLoginProcess(NFSession *pSession, SEC_PLAYER_LOGIN_PROCESS_TYPE type, const std::string &extraData);

public:
    // 当玩家登录时的回调函数
    // 参数 pPlayer: 登录的玩家对象指针
    // 返回值: 返回一个整型值，表示登录的结果或处理方式
    static int OnPlayerLogin(NFPlayer *pPlayer);

    // 当玩家登出时的回调函数
    // 参数 pPlayer: 登出的玩家对象指针
    // 返回值: 返回一个整型值，表示登出的结果或处理方式
    static int OnPlayerLogout(NFPlayer *pPlayer);

    // 当玩家断开连接时的回调函数
    // 参数 pPlayer: 断开连接的玩家对象指针
    // 参数 iType: 断开连接的类型或原因代码
    // 参数 iReason: 断开连接的具体原因代码
    // 返回值: 返回一个整型值，表示处理断开连接的结果或方式
    static int OnPlayerDisconnect(NFPlayer *pPlayer, int iType, int iReason);

    // 当玩家角色被删除时的回调函数
    // 参数 pSession: 玩家的会话对象指针
    // 参数 pstRoleOne: 被删除的角色对象指针
    // 返回值: 返回一个整型值，表示处理角色删除的结果或方式
    static int OnPlayerDelete(NFSession *pSession, RoleOne *pstRoleOne);

    // 当玩家账号被恢复时的回调函数
    // 参数 pPlayer: 被恢复的玩家对象指针
    // 返回值: 返回一个整型值，表示处理账号恢复的结果或方式
    static int OnPlayerRestored(NFPlayer *pPlayer);

    static int OnPlayerCreate(NFPlayer *pPlayer);
public:
    static int OnMoneyFlow(NFPlayer* pPlayer, NFLogPlayerMoneyFlow& nflog);
};
